<?php

namespace App\Services\Scenic\Driver;

use App\Trip\Geo\Location;

interface ScenicProviderInterface
{

    /**
     * 获取列表
     * @param string $keyword
     * @param int $page
     * @param int $pageSize
     * @param array $sort
     * @param Location $locationData
     * @return array
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function list(string $keyword,int $page,int $pageSize,array $sort,Location $locationData): array;

    /**
     * 推荐
     * @param int $limit
     * @param Location $locationData
     * @return array
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function recommend(int $limit,Location $locationData):array;

    /**
     * 人气景点
     * @param int $limit
     * @param Location $locationData
     * @return array
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function popular(int $limit,Location $locationData):array;

    /**
     * 景点搜索
     * @param string $keyword
     * @param string $citycode
     * @param string $inputLocation
     * @return array
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function search(string $keyword,string $citycode,string $inputLocation):array;

    /**
     * 详情
     * @param string $scenicId
     * @param Location $inputLocation
     * @return array
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function detail(string $id,Location $inputLocation) :array;

    /**
     * 门票列表
     * @param string $scenicId
     * @return array
     * @throws \Exception
     */
    public function tickets(string $scenicId) :array;

    /**
     * 门票详情
     * @param string $ticketId
     * @return array
     * @throws \Exception
     */
    public function ticket(string $ticketId) :array;

    /**
     * 同步景点数据到db
     * @param string $scenicId
     * @return bool
     */
    public function scenicToDb(string $scenicId) :bool;

    /**
     * 同步数据到db
     * @param $scenicId
     * @param $productId
     * @return bool
     */
    public function ticketToDb($scenicId,$productId) :bool;


}
